package com.goldsprite.projecttemplategenerator.test;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;

public class YamlStorage {

	/**
	 * 保存 YAML 数据到指定文件。
	 *
	 * @param data     YAML 数据
	 * @param filename 文件名
	 */
	public static void saveYaml(Map<String, Object> data, String filename) {
		try {
			Yaml yaml = new Yaml(YamlUtils.getPrettyDumperOptions());
			FileWriter writer = new FileWriter(Gdx.files.local(filename).file());
			yaml.dump(data, writer);
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/*
	 //这个有问题
	public static Map<String, Object> loadYaml(String filename, Map<String, Object> defaultData) {
		FileHandle file = Gdx.files.local(filename);
		Yaml yaml = new Yaml();

		try {
			// 检查文件是否存在
			if (!file.exists()) {
				System.out.println("YAML 配置文件未找到: " + filename + ". 返回默认数据.");
				return defaultData;
			}

			// 解析文件内容
			Map<String, Object> data = yaml.load(file.reader());
			if (data == null) {
				System.out.println("YAML 配置文件是空的: " + filename + ". 返回默认数据.");
				return defaultData;
			}

			return data;
		} catch (Exception e) {
			System.err.println("加载 YAML 配置文件失败: " + filename);
			e.printStackTrace();
			return defaultData;
		}
	}
	*/

	/**
	 * 检查指定的 YAML 文件是否存在。
	 *
	 * @param filename 文件名
	 * @return 如果文件存在则返回 true，否则返回 false
	 */
	public static boolean exists(String filename) {
		FileHandle file = Gdx.files.local(filename);
		return file.exists();
	}

	/**
	 * 加载 YAML 文件内容，如果文件不存在则创建文件并写入默认数据。
	 *
	 * @param filename    文件名
	 * @param defaultData 默认数据
	 * @return 加载的 YAML 数据或默认数据
	 */
	public static Map<String, Object> loadOrCreateYaml(String filename, Map<String, Object> defaultData) {
		FileHandle file = Gdx.files.local(filename);
		// 打印保存路径
		System.out.println("目标yaml文件路径: " + file.file().getAbsolutePath());
		Yaml yaml = new Yaml();

		try {
			// 如果文件不存在，创建文件并写入默认数据
			if (!file.exists()) {
				System.out.println("文件未找到: " + filename + ". 正在创建文件并写入默认数据.");
				try (Writer writer = file.writer(false)) { // false 表示覆盖写入
					yaml.dump(defaultData, writer);
				}
				return defaultData;
			}

			// 加载文件内容
			Map<String, Object> data = yaml.load(file.reader());
			if (data == null) {
				System.out.println("文件内容为空: " + filename + ". 正在写入默认数据.");
				try (Writer writer = file.writer(false)) {
					yaml.dump(defaultData, writer);
				}
				return defaultData;
			}

			return data;
		} catch (IOException e) {
			System.err.println("创建或写入 YAML 文件失败: " + filename);
			e.printStackTrace();
			return defaultData;
		} catch (Exception e) {
			System.err.println("加载 YAML 文件失败: " + filename);
			e.printStackTrace();
			return defaultData;
		}
	}
}


